import request from '../utils/request'

/**
 * 工作流服务 - 提供工作流相关的API接口调用
 */

/**
 * 创建工作流任务类型关系
 * @param {Object} workflowTaskData - 工作流任务类型数据
 * @returns {Promise} 创建结果
 */
export const createWorkflowTaskType = async (workflowTaskData) => {
  try {
    const response = await request.post('/api/workflow-task-types', workflowTaskData)
    return response
  } catch (error) {
    console.error('创建工作流任务类型关系失败:', error)
    throw error
  }
}

/**
 * 获取工作流的任务类型关系列表
 * @param {number} workflowId - 可选，工作流ID。如果不传则获取所有工作流的任务类型关系
 * @returns {Promise} 工作流任务类型关系列表
 */
export const getWorkflowTaskTypes = async (workflowId = null) => {
  try {
    let url = '/api/workflow-task-types'
    // 如果提供了workflowId，则添加到查询参数中
    if (workflowId !== null) {
      url = `${url}?workflowId=${workflowId}`
    }
    const response = await request.get(url)
    return response
  } catch (error) {
    if (workflowId !== null) {
      console.error(`获取工作流ID为${workflowId}的任务类型关系失败:`, error)
    } else {
      console.error('获取所有工作流的任务类型关系失败:', error)
    }
    throw error
  }
}

/**
 * 获取工作流列表
 * @returns {Promise} 工作流列表数据
 */
export const getWorkflows = async () => {
  try {
    const response = await request.get('/api/workflows')
    return response
  } catch (error) {
    console.error('获取工作流数据失败:', error)
    throw error
  }
}

/**
 * 根据ID获取工作流详情
 * @param {number} id - 工作流ID
 * @returns {Promise} 工作流详情数据
 */
export const getWorkflowById = async (id) => {
  try {
    const response = await request.get(`/api/workflows/${id}`)
    return response
  } catch (error) {
    console.error(`获取工作流ID为${id}的详情失败:`, error)
    throw error
  }
}

/**
 * 创建新工作流
 * @param {Object} workflowData - 工作流数据
 * @returns {Promise} 创建结果
 */
export const createWorkflow = async (workflowData) => {
  try {
    const response = await request.post('/api/workflows', workflowData)
    return response
  } catch (error) {
    console.error('创建工作流失败:', error)
    throw error
  }
}

/**
 * 更新工作流
 * @param {number} id - 工作流ID
 * @param {Object} workflowData - 工作流更新数据
 * @returns {Promise} 更新结果
 */
export const updateWorkflow = async (id, workflowData) => {
  try {
    const response = await request.put(`/api/workflows/${id}`, workflowData)
    return response
  } catch (error) {
    console.error(`更新工作流ID为${id}失败:`, error)
    throw error
  }
}

/**
 * 删除工作流
 * @param {number} id - 工作流ID
 * @returns {Promise} 删除结果
 */
export const deleteWorkflow = async (id) => {
  try {
    const response = await request.delete(`/api/workflows/${id}`)
    return response
  } catch (error) {
    console.error(`删除工作流ID为${id}失败:`, error)
    throw error
  }
}

/**
 * 删除工作流任务类型关系
 * @param {number} workflowId - 工作流ID
 * @param {number} taskTypeId - 任务类型ID
 * @returns {Promise} 删除结果
 */
export const deleteWorkflowTaskType = async (workflowId, taskTypeId) => {
  try {
    const response = await request.delete(`/api/workflow-task-types/workflow/${workflowId}/task-type/${taskTypeId}`)
    return response
  } catch (error) {
    console.error(`删除工作流ID为${workflowId}的任务类型ID为${taskTypeId}的关系失败:`, error)
    throw error
  }
}

/**
 * 获取工作流任务类型统计数据
 * @param {number} workflowId - 工作流ID
 * @param {Object} filters - 筛选条件
 * @param {string} filters.app - 应用信息
 * @param {string} filters.dep - 部门信息
 * @param {string} filters.version - 版本信息
 * @returns {Promise} 工作流任务类型统计数据
 */
export const getWorkflowStatistics = async (workflowId, filters = {}) => {
  try {
    // 构建查询参数
    const queryParams = new URLSearchParams()
    
    // 根据用户提供的Request接口定义添加参数
    if (filters.app) {
      queryParams.append('app', filters.app)
    }
    if (filters.dep) {
      queryParams.append('dep', filters.dep)
    }
    if (filters.version) {
      queryParams.append('version', filters.version)
    }
    
    const queryString = queryParams.toString()
    const url = queryString ? 
      `/api/workflow-task-types/workflow/${workflowId}/statistics?${queryString}` : 
      `/api/workflow-task-types/workflow/${workflowId}/statistics`
    
    const response = await request.get(url)
    return response
  } catch (error) {
    console.error(`获取工作流ID为${workflowId}的统计数据失败:`, error)
    throw error
  }
}
